/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: DeletedDupLNLogEntry.java,v 1.1 2006/05/06 09:01:38 ckaestne Exp $
*/
package com.sleepycat.je.log.entry;
import java.nio.ByteBuffer;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.dbi.DatabaseId;
import com.sleepycat.je.log.LogEntryType;
import com.sleepycat.je.log.LogUtils;
import com.sleepycat.je.tree.Key;
import com.sleepycat.je.tree.LN;
import com.sleepycat.je.txn.Txn;
/**
* DupDeletedLNEntry encapsulates a deleted dupe LN entry. This contains all
* the regular transactional LN log entry fields and an extra key, which is the
* nulled out data field of the LN (which becomes the key in the duplicate
* tree.
*/
public class DeletedDupLNLogEntry extends LNLogEntry {
/*
* Deleted duplicate LN must log an entra key in their log entries,
* because the data field that is the "key" in a dup tree has been
* nulled out because the LN is deleted.
*/
private byte[] dataAsKey;
/**
* Constructor to read an entry.
*/
public DeletedDupLNLogEntry(boolean isTransactional) {
super(com.sleepycat.je.tree.LN.class, isTransactional);
}
/**
* Constructor to make an object that can write this entry.
*/
public DeletedDupLNLogEntry(LogEntryType entryType,
LN ln,
DatabaseId dbId,
byte[] key,
byte[] dataAsKey,
long abortLsn,
boolean abortKnownDeleted,
Txn txn) {
super(entryType, ln, dbId, key, abortLsn, abortKnownDeleted, txn);
this.dataAsKey = dataAsKey;
}
/**
* Extends its super class to read in the extra dup key.
* @see LNLogEntry#readEntry
*/
public void readEntry(ByteBuffer entryBuffer,
int entrySize,
byte entryTypeVersion,
boolean readFullItem)
throws DatabaseException {
super.readEntry(entryBuffer, entrySize,
entryTypeVersion, readFullItem);
/* Key */
if (readFullItem) {
dataAsKey = LogUtils.readByteArray(entryBuffer);
} else {
/* The LNLogEntry base class has already positioned to the end. */
dataAsKey = null;
}
}
/**
* Extends super class to dump out extra key.
* @see LNLogEntry#dumpEntry
*/
public StringBuffer dumpEntry(StringBuffer sb, boolean verbose) {
super.dumpEntry(sb, verbose);
sb.append(Key.dumpString(dataAsKey, 0));
return sb;
}
/*
* Writing support
*/
/**
* Extend super class to add in extra key.
* @see LNLogEntry#getLogSize
*/
public int getLogSize() {
return super.getLogSize() +
LogUtils.getByteArrayLogSize(dataAsKey);
}
/**
* @see LNLogEntry#writeToLog
*/
public void writeToLog(ByteBuffer destBuffer) {
super.writeToLog(destBuffer);
LogUtils.writeByteArray(destBuffer, dataAsKey);
}
/*
* Accessors
*/
/**
* Get the data-as-key out of the entry.
*/
public byte[] getDupKey() {
return dataAsKey;
}
}